# coding:utf-8  


class HttpMixin:

    {%- if cookiecutter.create_index_view in ('yes', 'y') %}
    def configure_views(self):
        """
        配置基础视图函数，用于快速原型开发
        这里可以添加简单的视图用于快速测试
        """
        from flask import render_template  # 导入模板渲染函数

        # 定义首页路由
        @self.route('/')
        def index():
            """默认首页视图"""
            return render_template('index.html')  # 渲染index.html模板
    {%- endif %}

    def configure_template_extensions(self):
        """
        配置Jinja2模板扩展
        这里可以添加自定义的Jinja2扩展
        """
        # 添加do扩展，允许在模板中使用do语句
        self.jinja_env.add_extension('jinja2.ext.do')

    def configure_error_handlers(self):
        """
        配置HTTP错误处理
        为常见HTTP错误代码提供自定义错误页面
        """
        from flask import render_template  # 导入模板渲染函数

        # 403禁止访问错误处理
        @self.errorhandler(403)
        def forbidden_page(error):
            """
            服务器理解请求但拒绝执行
            授权无效且不应重复请求
            如果不是HEAD请求且服务器希望公开拒绝原因，应在响应体中说明
            如果不希望公开信息，可使用404状态码替代
            """
            return render_template("http/access_forbidden.html"), 403

        # 404页面未找到错误处理
        @self.errorhandler(404)
        def page_not_found(error):
            """
            服务器未找到与请求URI匹配的资源
            未指明是临时还是永久状态
            如果资源永久不可用且无转发地址，应使用410状态码
            常用于服务器不希望透露拒绝原因或无其他适用响应的情况
            """
            return render_template("http/page_not_found.html"), 404

        # 405方法不允许错误处理
        @self.errorhandler(405)
        def method_not_allowed_page(error):
            """
            请求行中指定的方法不允许用于该资源
            响应必须包含Allow头部，列出该资源的有效方法
            """
            return render_template("http/method_not_allowed.html"), 405

        # 500服务器内部错误处理
        @self.errorhandler(500)
        def server_error_page(error):
            """服务器内部错误处理"""
            return render_template("http/server_error.html"), 500